#include "pch.hpp"
#include "LineEdit.hpp"
#include "HorizontalLayout.hpp"




LineEdit::LineEdit(Widget* parent, Widgets::Type finalType /*= Widgets::LineEdit*/)
	: Frame(parent, finalType)
	, m_caption(new Text("", this, Widgets::Text))
{
	if(finalType == type())
		updateStyle();

	// We make use of a layout to ensure that the text edit
	// is properly resized
	LayoutPtr layout(new HorizontalLayout(this));
	setLayout(layout);
	layout->add(m_caption);
}
///////////////////////////////////////////////////////////////////////////////////////////////////

LineEdit::~LineEdit()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////




const FontDesc& LineEdit::fontDesc() const
{
	return m_caption->fontDesc();
}
///////////////////////////////////////////////////////////////////////////////////////////////////

QString LineEdit::caption() const
{
	return m_caption->text();
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void LineEdit::setCaption(const QString& text)
{
	m_caption->setText(text);
}
///////////////////////////////////////////////////////////////////////////////////////////////////




Widgets::Type LineEdit::type() const
{
	return Widgets::LineEdit;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void LineEdit::styleChanged()
{
	__super::styleChanged();

	m_caption->updateStyle();

	setMinimumHeight(m_caption->fontDesc().size);
	setMaximumHeight(m_caption->fontDesc().size);
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void LineEdit::processInput(QChar c)
{
	// Look for special characters
	switch(c.unicode())
	{
	case 8: // Backspace
		if(m_caption->text().size())
			m_caption->setText(m_caption->text().left(m_caption->text().size() - 1));
		break;
	case 9: // Escape, probably lose focus...
		break;
	default:
		if(c >= 32)
			m_caption->appendText(c);
		break;
	}
}
///////////////////////////////////////////////////////////////////////////////////////////////////
